package com.su.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Service;

import com.su.tools.DaoSupport1;
import com.su.tools.PageData;
import com.su.util.Page;

import net.sf.json.JSONObject;
//import org.json.JSONObject;

@Service("userService")
public class UserService {

	@Resource(name = "daoSupport1")
	private DaoSupport1 dao;
	private JSONObject json = new JSONObject();
	private PageData retPd;
	private List<PageData> retListPd;

	public JSONObject invoke(PageData pd) throws Exception {
		//
		if (pd.getString("params").equals("U101")) {
			this.U101(pd);
		} else if (pd.getString("params").equals("U102")) {
			this.U102(pd);
		} else if (pd.getString("params").equals("U103")) {
			this.U103(pd);
		} else if (pd.getString("params").equals("U104")) {
			this.U104(pd);
		} else if (pd.getString("params").equals("U105")) {
			this.U105(pd);
		} else if (pd.getString("params").equals("U106")) {
			this.U106(pd);
		} else if (pd.getString("params").equals("U107")) {
			this.U107(pd);
		} else if (pd.getString("params").equals("U108")) {
			this.U108(pd);
		} else {
			json.put("code", "100");
			json.put("msg", "没有找到该业务代码");
			return json;
		}
		return json;
	}

	/**
	 * 用户登录校验
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U101(PageData pd) throws Exception {

		retPd = dao.getOne("UserMapper.loginValidate", pd);
		if (retPd == null) {
			json.put("code", "1");
			json.put("msg", "用户名或密码错误！");
		} else {
			json.put("code", "0");
			json.put("msg", "");
			json.put("result", retPd);
			// 设置缓存
			HttpServletRequest request = pd.getRequest();
			HttpSession session = request.getSession();
			session.setAttribute("session_user", pd.get("userName"));
			// 更新登录时间
			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String dateNow = sdf.format(d);
			pd.put("LAST_LOGIN_DATE", dateNow);
			int rows = dao.update("UserMapper.updateLastLoginDate", pd);
		}
	}

	/**
	 * 获取所有用户数据
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U102(PageData pd) throws Exception {
		retListPd = dao.getList("UserMapper.countUser", pd);
		int total = retListPd.size();
		retListPd = dao.getList("UserMapper.userList", pd);
		json.put("total", total);
		json.put("rows", retListPd);
	}

	/**
	 * 保存用户数据
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U103(PageData pd) throws Exception {
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateNow = sdf.format(d);
		pd.put("CREATE_DATE", dateNow);
		pd.put("LAST_LOGIN_DATE", dateNow);
		pd.put("JLZT", 1);

		retPd = dao.getOne("UserMapper.existUser", pd);
		int rows = 0;
		if (retPd != null) {
			rows = dao.update("UserMapper.updateUser", pd);
		} else {
			rows = dao.insert("UserMapper.insertUser", pd);
		}
		if (rows > 0) {
			json.put("status", "true");
		} else {
			json.put("status", "false");
		}

	}

	/**
	 * 获取用户信息
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U104(PageData pd) throws Exception {
		retPd = dao.getOne("UserMapper.userMode", pd);
		if (retPd != null) {
			json.put("status", "true");
			json.put("record", retPd);
		} else {
			json.put("status", "false");
			json.put("record", retPd);
		}
	}

	/**
	 * 获取用户菜单列表
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U105(PageData pd) throws Exception {
		retListPd = dao.getList("UserMapper.getUserMenu", pd);
		for (PageData p : retListPd) {
			if ("#".equals(p.get("_parentId"))) {
				p.remove("_parentId");
				p.put("_parentId", "");
			}
		}
		if (retListPd.size() == 0) {
			json.put("code", "1");
			json.put("msg", "没有查询到数据");
		} else {
			json.put("total", retListPd.size());
			json.put("rows", retListPd);
		}
	}

	/**
	 * 保存用户菜单权限信息
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U106(PageData pd) throws Exception {
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateNow = sdf.format(d);
		pd.put("CREATE_DATE", dateNow);

		dao.delete("UserMapper.delUserMenu", pd);
		String checkedValue = pd.getString("checkedValue");
		if (!"".equals(checkedValue)) {
			for (String MENU_CODE : checkedValue.split(",")) {
				pd.remove("MENU_CODE");
				pd.put("MENU_CODE", MENU_CODE);
				dao.insert("UserMapper.insertUserMenu", pd);
			}

		}
	}

	/**
	 * 修改密码
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U107(PageData pd) throws Exception {

		int rows = 0;
		rows = dao.update("UserMapper.updatePassword", pd);
		if (rows > 0) {
			json.put("status", "true");
		} else {
			json.put("status", "false");
		}
	}
	/**
	 * 删除用户
	 * 
	 * @param pd
	 * @throws Exception
	 */
	private void U108(PageData pd) throws Exception {

		int rows = 0;
		dao.delete("UserMapper.delUserMenu", pd);
		rows = dao.delete("UserMapper.delUser", pd);
		if (rows > 0) {
			json.put("status", "true");
		} else {
			json.put("status", "false");
		}
	}

	// ======================================================================================

	/*
	 * 保存用户
	 */
	public void saveU(PageData pd) throws Exception {
		dao.insert("AppuserMapper.saveU", pd);
	}

	/*
	 * 修改用户
	 */
	public void editU(PageData pd) throws Exception {
		dao.update("AppuserMapper.editU", pd);
	}

	/*
	 * 删除用户
	 */
	public void deleteU(PageData pd) throws Exception {
		dao.delete("AppuserMapper.deleteU", pd);
	}

	/*
	 * 批量删除用户
	 */
	public void deleteAllU(String[] USER_IDS) throws Exception {
		dao.delete("AppuserMapper.deleteAllU", USER_IDS);
	}

	/*
	 * 用户列表(全部)
	 * 
	 * public List<PageData> listAllUser(PageData pd) throws Exception { return
	 * (List<PageData>) dao.findForList("AppuserMapper.listAllUser", pd); }
	 */
	/*
	 * 用户列表(用户组)
	 * 
	 * public List<PageData> listPdPageUser(Page page) throws Exception { return
	 * (List<PageData>) dao.findForList("AppuserMapper.userlistPage", page); }
	 */
	/*
	 * 保存用户IP
	 * 
	 * public void saveIP(PageData pd) throws Exception {
	 * dao.update("AppuserMapper.saveIP", pd); }
	 */
	/*
	 * 登录判断
	 * 
	 * public PageData getUserByNameAndPwd(PageData pd) throws Exception {
	 * return (PageData) dao.findForObject("AppuserMapper.getUserInfo", pd); }
	 */
	/*
	 * 跟新登录时间
	 */
	public void updateLastLogin(PageData pd) throws Exception {
		dao.update("AppuserMapper.updateLastLogin", pd);
	}
	// ======================================================================================

}
